package javamusic.DAO;
//import com.mysql.jdbc.PreparedStatement;
import java.sql.*;
import java.util.ArrayList;
import java.util.Collection;
import com.sun.xml.internal.ws.api.pipe.NextAction;
import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils.Collections;
import javamusic.excepcion.DAOExcepcion;
import javamusic.modelo.Producto;
import javamusic.modelo.Reserva;
import javamusic.util.ConexionBDKaraoke;

public class ProductoDAO extends BaseDAO {	
   /*
    *  PROCEDIMIENTOS DE PRODUCTO - CREAR
    */		
	public void ProductoInsertar(Producto vo) throws DAOExcepcion{
		String query = "insert into producto(idproducto,nombre, precio,elog,disponible,idtipoproducto) values (?,?,?,?,?,?)";
			Connection con =null;
			PreparedStatement stmt = null;
		try {
			con = ConexionBDKaraoke.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1,vo.getIdproducto());
			stmt.setString(2, vo.getNombre());
			stmt.setDouble(3, vo.getPrecio());
			stmt.setInt(4,vo.getElog());
			stmt.setInt(5, vo.getDisponible());
			stmt.setInt(6, vo.getIdtipoproducto());	
			int i = stmt.executeUpdate();
			if(i !=1){
				throw new SQLException("No se pudo insertar"); // comunica al negocio
			}		
		} catch (SQLException e) {
		System.err.println(e.getMessage());
		throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}		
	}

	
	/*
	 *  PROCEDIMIENTOS DE PRODUCTO - BUSCAR POR NOMBRE
	 */	
	public Collection<Producto>ProductoBuscaPorNombre(String nombre) throws DAOExcepcion{
		String query = "select idproducto,nombre,precio,elog,disponible,idtipoproducto from producto where  nombre like ?";
		Collection<Producto> pro = new ArrayList<Producto>();
		Connection con =null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBDKaraoke.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1,"%" + nombre + "%");
			rs =stmt.executeQuery();
			while (rs.next()){
				Producto vo = new Producto();
				vo.setIdproducto(rs.getInt("idproducto"));
				vo.setNombre(rs.getString("nombre"));
				vo.setPrecio(rs.getDouble("precio"));
				vo.setElog(rs.getInt("elog"));
				vo.setDisponible(rs.getInt("disponible")); 
				vo.setIdtipoproducto(rs.getInt("idtipoproducto"));
				pro.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());		
			}finally{
				this.cerrarResultSet(rs);
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
			return pro;
		}
		
	
  /*
   *  PROCEDIMIENTOS DE PRODUCTO - MODIFICAR
   */	
   public Producto ProductoActulizar(Producto vo) throws DAOExcepcion {
	   String query = "update producto set nombre=?,precio=?,elog=?,disponible=?,idtipoproducto=? where idproducto=? ";
	   Connection con =null;
	   PreparedStatement stmt = null;
	   try {
		   con = ConexionBDKaraoke.obtenerConexion();
		   stmt =con.prepareStatement(query);
		   
		   stmt.setString(1, vo.getNombre());
		   stmt.setDouble(2, vo.getPrecio());
		   stmt.setInt(3,vo.getElog());
		   stmt.setInt(4, vo.getDisponible());
		   stmt.setInt(5, vo.getIdtipoproducto());
		   stmt.setInt(6,vo.getIdproducto()); 
		   System.out.println("actualizando " + vo.getIdproducto());
		   
	       int  i = stmt.executeUpdate();
	       if(i !=1){
	    	  throw new SQLException("No se pudo actulizar");
	       }		
	   } catch (SQLException e) {
	          System.err.println(e.getMessage());
	          throw new DAOExcepcion(e.getMessage());
	   }finally{
		   this.cerrarStatement(stmt);
		   this.cerrarConexion(con);
	   }
	    return vo;
   }
     
   /* 
	*  PROCEDIMIENTOS DE PRODUCTO - ELIMINAR
	*/	  
   public void  ProductoEliminar(int idproducto) throws DAOExcepcion {
	   String query = "delete from producto where idproducto=?";
	   Connection con =null;
	   PreparedStatement stmt = null;
	   //int i = 0;
	   try {
		   con = ConexionBDKaraoke.obtenerConexion();
		   stmt =con.prepareStatement(query);		   
		   stmt.setInt(1, idproducto);
		   int i = stmt.executeUpdate();
	       if(i !=1){
	    	  throw new SQLException("No se pudo Eliminar");
	       }		
	   } catch (SQLException e) {
	          System.err.println(e.getMessage());
	          throw new DAOExcepcion(e.getMessage());
	   }finally{
		   this.cerrarStatement(stmt);
		   this.cerrarConexion(con);
	   }
	   //return i;
	   }

    /* 
	*  PROCEDIMIENTOS DE PRODUCTO - LISTAR
	*/	 
   public Collection<Producto> Listar() throws DAOExcepcion {
		Collection<Producto> c = new ArrayList<Producto>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBDKaraoke.obtenerConexion();
			String query = "select idproducto,nombre, precio,elog,disponible, idtipoproducto from Producto";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Producto vo = new Producto();
				vo.setIdproducto(rs.getInt("idproducto"));
				vo.setNombre(rs.getString("nombre"));
				vo.setPrecio(rs.getDouble("precio"));
				vo.setElog(rs.getInt("elog"));
				vo.setDisponible(rs.getInt("disponible")); 
				vo.setIdtipoproducto(rs.getInt("idtipoproducto"));
				c.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	} 
   
   /* 
	*  PROCEDIMIENTOS DE PRODUCTO - PRODUCTO OBTENER
	*/	    
   public Producto ProductoObtener(int ProId) throws DAOExcepcion {
		Producto vo = new Producto();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBDKaraoke.obtenerConexion();
			String query = "select idproducto,nombre, precio,elog,disponible, idtipoproducto from Producto where idproducto=?";
			stmt = con.prepareStatement(query);
			stmt.setInt(1,ProId);
			rs = stmt.executeQuery();			
			if (rs.next()) {
				vo.setIdproducto(rs.getInt(1));
				vo.setNombre(rs.getString(2));
				vo.setPrecio(rs.getDouble(3));
				vo.setElog(rs.getInt(4));
				vo.setDisponible(rs.getInt(5)); 
				vo.setIdtipoproducto(rs.getInt(6));
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}
   
   
   }
	   

   
   
	


